package cn.edu.lzu.common.util;

import com.swetake.util.Qrcode;

import java.awt.*;
import java.awt.image.BufferedImage;

/**
 * @PackageName: cn.edu.lzu.common.util
 * @ClassName: CreateQRcode
 * @Description: TODO 生成二维码的工具类
 * @Author: 张琦[QQ:3098086691]
 * @Date: 2020/2/28 21:40
 * @Version: 1.0
 */
public class CreateQRcode {
    public static BufferedImage getQRcode(String content, int version) throws Exception {
        Qrcode qrcode = new Qrcode();
        qrcode.setQrcodeEncodeMode('N');//设置二维码编码模式‘N’代表数字，A代表a-Z，B代表其它字符
        qrcode.setQrcodeVersion(version);//设置二维码的版本，和像素有关。有1——40个版本；
        qrcode.setQrcodeErrorCorrect('M');//纠错等级（分为L、M、H三个等级）
        //设置一下二维码的像素
        int width = 67 + 12 * (version - 1);
        int height = 67 + 12 * (version - 1);

        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        Graphics2D gs = bufferedImage.createGraphics();
        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        gs.clearRect(0, 0, width, height);//清除下画板内容

        //设置下偏移量,如果不加偏移量，有时会导致出错。
        int pixoff = 2;

        //要二维码加密的内容的字节数组
        byte[] contentByte = content.getBytes("utf-8");
        if (contentByte.length > 0 && contentByte.length < 120) {
            boolean[][] matrix = qrcode.calQrcode(contentByte);
            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix.length; j++) {
                    if (matrix[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        gs.dispose();
        bufferedImage.flush();
        return bufferedImage;
    }

}
